/**
 * @Description:解码异或后的数组
 * 未知 整数数组 arr 由 n 个非负整数组成。
 * 经编码后变为长度为 n - 1 的另一个整数数组 encoded ，
 * 其中 encoded[i] = arr[i] XOR arr[i + 1] 。
 * 例如，arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。
 * 给你编码后的数组 encoded 和原数组 arr 的第一个元素 first（arr[0]）。
 * 请解码返回原数组 arr 。可以证明答案存在并且是唯一的。
 *
 * @Date:Create in 10:59  2022/5/24
 */
public class decode1720 {
    public static void main(String[] args) {
        int[] encoded = new int[]{6,2,7,3};
        int first = 4;
        int[] arr = decode1(encoded,first);
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }

    //异或运算
    /*
    encoded[i−1]          =arr[i−1]⊕arr[i]
    encoded[i−1]⊕arr[i−1]=arr[i−1]⊕arr[i]⊕arr[i−1]
    arr[i−1]⊕encoded[i−1]=arr[i−1]⊕arr[i−1]⊕arr[i]
    arr[i−1]⊕encoded[i−1]=0⊕arr[i]
    arr[i−1]⊕encoded[i−1]=arr[i]
     */

    public static int[] decode1(int[] encoded, int first) {
        int[] arr = new int[encoded.length+1];
        arr[0] = first;
        for(int i=0;i<encoded.length;i++){
            first ^= encoded[i];
            arr[i+1] = first;
        }
        return arr;
    }
}
